%% inicio, la clase del documento es iccmemoria.cls
\documentclass{avancememoria}

%% datos generales y para la tapa
\titulo{Diseño e Implementación de algoritmos para la captura y decodificación de códigos de barra QR Code en dipositivos móviles}
\author{Luis Eduardo González Martínez}
\supervisor{Benjamin Ingram}

\director{Profesor del ramo Memoria de Ttulo}
\date{27, Octubre}

%% inicio de documento
\begin{document}

%% crea la tapa
\maketitle
\chapter{Metodología}
\section{¿Que es una Metodología?}
"Conjunto de métodos que se siguen en una investigación científica o en una exposición doctrinal".% real academia española

\section{Metodología de desarrollo del software.}
Durante el ciclo de vida del software se deben completar una serie de tareas para obtener un producto de software. Además se puede distinguir que distintos componentes del software deben pasar por distintas fases o etapas durante el proceso de desarrollo o ciclo de vida. Cada una de estas tareas se pueden desarrollar y resolver de muchas maneras, con distintas herramientas y usando alguna técnica. Además tenemos que especificar cuándo se termina una tarea, quien debe realizarla, que tareas preceden o anteceden a una dada, que documentación utilizaremos para llevar a cabo esa tarea.\\

Existe una amplia gama de metodologías ágiles que permiten desarrolar softwares, las cuales entregan herramientas que guian en la creación de estos.\\
Algunas de estas metodologías pueden ser:\\
\begin{enumerate}
\item PROGRAMACIÓN EXTREMA o XP: es una metodología ágil centrada en potenciar las relaciones interpersonales como clave para el éxito en desarrollo de software, promoviendo el trabajo en equipo, preocupándose por el aprendizaje de los desarrolladores, y propiciando un buen clima de trabajo.

\item SCRUM: Desarrollada por Ken Schwaber, Jeff Sutherland y Mike Beedle. Define un marco para la gestión de proyectos, que se ha utilizado con éxito durante los últimos 10 años. Está especialmente indicada para proyectos con un rápido cambio de requisitos. Sus principales características se pueden resumir en dos. El desarrollo de software se realiza mediante iteraciones, denominadas sprints y la segunda característica importante son las reuniones a lo largo proyecto.

\item Metodologías Crystal:conjunto de metodologías para el desarrollo de software caracterizadas por estar centradas en las personas que componen el equipo y la reducción al máximo del número de artefactos producidos. El desarrollo de software se considera un juego cooperativo de invención y comunicación, limitado por los recursos a utilizar.

\item Dynamic Systems Development Method  (DSDM): Nace en 1994 con el objetivo de crear una metodología RAD unificada. Sus principales características son: es un proceso iterativo e incremental y el equipo de desarrollo y el usuario trabajan juntos. Propone cinco fases: estudio viabilidad, estudio del negocio, modelado funcional, diseño y construcción, y finalmente implementación.

\item Feature Driven Development (FDD): Define un proceso iterativo que consta de 5 pasos. Las iteraciones son cortas (hasta 2 semanas). Se centra en las fases de diseño e implementación del sistema partiendo de una lista de características que debe reunir el software. 

\end{enumerate}

FDD es una metodología desarrollada alrededor del año 1998 que presenta las características de un proceso ágil. Esta pensado en proyectos con tiempo de desarrollo relativamente cortos(menos de un año). Se basa en un proceso iterativo con iteraciones cortas (2 semanas aproximadamente), que producen un software funcional que el cliente y la dirección de la empresa pueden ver y monitoriar.\\
Las iteraciones se deciden en base a funcionalidades, que son pequeñas partes del software con significado para el cliente.\\

Un proyecto que sigue FDD se divide en 5 fases:\\
\begin{enumerate}
\item Desarrollo de un modelo general.
\item Construcción de la lista de funcionalidades.
\item Plan de releases en base a las funcionalidades a implenentar.
\item Diseñar en base a las funcionalidades.
\item Implementar en base a las funcionalidaades.
\end{enumerate}

La primera actividad consiste en Desarrollar un Modelo General, que actua en paralelo con la construcción de la arquitectura del software. Cuendo se  crea este modelo participan tanto los expertos en el dominio como los desarrolladores. Mediante el esfuerzo de ambas partes se intenta lograr lo que el modelo en espiral proponía con sus primeras iteraciones: un conocimiento global de la aplicación a construir, el entendimiento del negocio en que esta embebida, un primer bosquejo de las features del software, y la definición de restricciones y cuestiones no funcionales. Para esto, se desarrollarán: diagramas de los paquetes, con las clases esenciales y las responsabilidades de las mismas.\\

La segunda actividad, Construir una Lista de funcionalidades, comienza tomando el bosquejo de funcionalidades formulado durante la actividad anterior para refinar las funcionalidades incluidas. Una vez que se han identificado las mismas se las agrupa jerárquicamente para poder estructurar el trabajo de desarrollo; se asignan prioridades segun la satisfacción del cliente – las prioridades sugeridas para las funcionalidades por FDD son: A (debe tener), B (sería útil tener), C (agregar si es posible), o D (futuro); finalmente, se pondera la importancia de cada una para su posterior implementación.\\

La tercera actividad, Planificar por Funcionalidades, toma como input la lista priorizada de la fase anterior y establece los tiempos para las futuras iteraciones. En esta actividad participan el líder de proyecto, el líder de desarrollo y el programador jefe. A medida que se realiza la planificación se delinean los hitos de finalización de las iteraciones, dejando claro cuales son los funcionalidades o conjunto de estas que estarán construidos en dichos hitos. Ademas incluye el encargado de programación.\\

Las últimas dos actividades, Diseñar por Funcionalidades y Construir por Funcionalidad, están relacionadas con la parte productiva del proceso en que se construye la aplicación de manera incremental. Empezando por el diseño que toma las funcionalidades correspondientes a la iteración, el equipo de programadores liderado por el programador jefe identifica las clases, atributos y métodos que realizan la funcionalidad requerida.


%% genera las referencias
%\bibliography{refs1}

%% fin
\end{document}

   

